Telegram Group & Telegram Channel
🐍 Хитрая задача на Python для опытных разработчиков

🔹 Уровень: Advanced
🔹 Темы: изменяемые объекты, ссылки, list multiplication, side effects

📌 Условие

Что выведет следующий код?


matrix = [[0] * 3] * 3

matrix[0][0] = 1

for row in matrix:
print(row)


Вопросы

1. Почему изменяется весь первый столбец, а не только [0][0]?
2. Как работает [[0]*3]*3 и почему это опасно?
3. Как правильно создать независимую матрицу 3×3 из нулей?

🔍 Разбор

Ожидаемый (и удивительный!) вывод:

[1, 0, 0]
[1, 0, 0]
[1, 0, 0]


🔧 Почему так происходит

- Выражение [[0] * 3] * 3 создаёт три ссылки на один и тот же вложенный список.
- matrix[0][0] = 1 меняет все строки, потому что они указывают на один и тот же объект в памяти.

⚠️ Подвох

Это один из самых частых скрытых багов в Python, особенно при создании вложенных списков.

🧠 Решение

Нужно использовать генератор списка, чтобы создать три независимых объекта:


matrix = [[0] * 3 for _ in range(3)]


Теперь matrix[0][0] = 1 затронет только первую строку:


[1, 0, 0]
[0, 0, 0]
[0, 0, 0]


📌 Всегда проверяй, создаёшь ли ты уникальные объекты, особенно если работаешь с вложенными структурами.



tg-me.com/pro_python_code/1811
Create:
Last Update:

🐍 Хитрая задача на Python для опытных разработчиков

🔹 Уровень: Advanced
🔹 Темы: изменяемые объекты, ссылки, list multiplication, side effects

📌 Условие

Что выведет следующий код?


matrix = [[0] * 3] * 3

matrix[0][0] = 1

for row in matrix:
print(row)


Вопросы

1. Почему изменяется весь первый столбец, а не только [0][0]?
2. Как работает [[0]*3]*3 и почему это опасно?
3. Как правильно создать независимую матрицу 3×3 из нулей?

🔍 Разбор

Ожидаемый (и удивительный!) вывод:

[1, 0, 0]
[1, 0, 0]
[1, 0, 0]


🔧 Почему так происходит

- Выражение [[0] * 3] * 3 создаёт три ссылки на один и тот же вложенный список.
- matrix[0][0] = 1 меняет все строки, потому что они указывают на один и тот же объект в памяти.

⚠️ Подвох

Это один из самых частых скрытых багов в Python, особенно при создании вложенных списков.

🧠 Решение

Нужно использовать генератор списка, чтобы создать три независимых объекта:


matrix = [[0] * 3 for _ in range(3)]


Теперь matrix[0][0] = 1 затронет только первую строку:


[1, 0, 0]
[0, 0, 0]
[0, 0, 0]


📌 Всегда проверяй, создаёшь ли ты уникальные объекты, особенно если работаешь с вложенными структурами.

BY Python RU


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/pro_python_code/1811

View MORE
Open in Telegram


Python RU Telegram | DID YOU KNOW?

Date: |

Launched in 2013, Telegram allows users to broadcast messages to a following via “channels”, or create public and private groups that are simple for others to access. Users can also send and receive large data files, including text and zip files, directly via the app.The platform said it has more than 500m active users, and topped 1bn downloads in August, according to data from SensorTower.

Tata Power whose core business is to generate, transmit and distribute electricity has made no money to investors in the last one decade. That is a big blunder considering it is one of the largest power generation companies in the country. One of the reasons is the company's huge debt levels which stood at ₹43,559 crore at the end of March 2021 compared to the company’s market capitalisation of ₹44,447 crore.

Python RU from no


Telegram Python RU
FROM USA